package com.atguigu.spring5_webflux.handler;

import com.atguigu.spring5_webflux.entity.User;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;

import javax.xml.transform.Source;
import java.sql.SQLOutput;

public class Client {
    public static void main(String[] args) {
        // 创建WebClient，指定服务器地址
        WebClient webClient = WebClient.create("http://127.0.0.1:60422");
        // 根据id查询
        String id = "1";
        /**
         *
         * webClient.get() 指定请求方式，还有post等
         * accept 指定接收返回数据的类型
         * retrieve 初始化
         * bodyToMono 获取数据转化为指定对象类型,目标类必须有无参构造方法
         * block 触发最终去执行，开启订阅
         */
        User res = webClient.get().uri("/users/{id}", id).accept(MediaType.APPLICATION_JSON).retrieve().bodyToMono(User.class).block();
        System.out.println(res.toString());

        // 查询所有
        Flux<User> ress = webClient.get().uri("/users").accept(MediaType.APPLICATION_JSON).retrieve().bodyToFlux(User.class);
        ress.map(user -> user.getName()).buffer().doOnNext(System.out::println).blockFirst();
    }
}
